/**
 * Generali Solutions d'assurances - Tous droits réservés &copy; 2007 - 2010
 */
package fr.generali.accueilclient.client.assembler.output.p42;

import java.text.SimpleDateFormat;
import java.util.Locale;

import org.apache.commons.collections.CollectionUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.core.convert.converter.Converter;
import org.springframework.stereotype.Component;

import fr.generali.accueilclient.client.om.IClientParticulier;
import fr.generali.accueilclient.client.om.impl.ClientParticulier;
import fr.generali.refservcommuns.clients.prima.DatedMonetaryQuantityRangeValue;
import fr.generali.refservcommuns.rce.servperscom.pty.detailspersonnes.DtoDetailActiviteProfessionnelle;
import fr.generali.refservcommuns.rce.servperscom.pty.personnes.DtoPersonnePhysique;
import fr.generali.refservcommuns.rce.consultpersonnecontact.dossierpersonnecontact.DtoDossierP42;

/**
 * Transforme un {@link DtoDossierP42} en {@link IClientParticulier}
 * 
 * @author selrhazala
 */
@Component("dtoDossierP42ToClientParticulierConverter")
public class DtoDossierP42ToClientParticulierConverter implements
    Converter<DtoDossierP42, IClientParticulier> {

    /**
     * LOGGER
     */
    private static final Logger LOGGER = LoggerFactory.getLogger(DtoDossierP42ToClientParticulierConverter.class);

    /**
     * {@inheritDoc}
     */
    public IClientParticulier convert(DtoDossierP42 input) {
        LOGGER.debug("assemble");
        IClientParticulier client = new ClientParticulier();
        DtoPersonnePhysique personne = input.getPersonnePhysique();

        if (personne.getDetailSituationFamiliale() != null) {
            client.setSituationFamiliale(personne.getDetailSituationFamiliale().getEtatUnion());
            if (personne.getDetailSituationFamiliale().getNombreEnfants() != null) {
                client.setNbEnfants(personne.getDetailSituationFamiliale().getNombreEnfants().toString());
            }
        }

        if (personne.getCategorieSocioProfessionnelle() != null) {
            client.setStatutProfessionnel1(personne.getCategorieSocioProfessionnelle().getCodePCS());
        }

        if (CollectionUtils.isNotEmpty(personne.getDetailActiviteProfessionnelle())) {
            DtoDetailActiviteProfessionnelle dtoDetailActiviteProfessionnelle =
                            personne.getDetailActiviteProfessionnelle().get(0);
            DatedMonetaryQuantityRangeValue dmq = dtoDetailActiviteProfessionnelle.getRevenuBorne();
            if (dmq != null) {
                client.setRevenuAnnuel(dmq.getCodeIndicateurSaisie());
            }

            if (dtoDetailActiviteProfessionnelle.getPeriodeFiscale() != null) {
                SimpleDateFormat formatter = new SimpleDateFormat("yyyyMMdd", Locale.FRANCE);
                String strDate = formatter.format(
                                dtoDetailActiviteProfessionnelle.getPeriodeFiscale().toGregorianCalendar().getTime());
                if (strDate != null && strDate.trim().length() > 4) {
                    String strAnnee = strDate.substring(0, 4);
                    client.setAnneeRevenu(strAnnee);
                }
            }
        }
        
        if (personne.getCompteEspaceClient() != null && personne.getCompteEspaceClient().length() > 0) {
            client.setCompteEspaceClient(personne.getCompteEspaceClient());
        }

        return client;
    }
}
